#####################################################################################
#
# 使用 pymssql 动态查询 SQL Server
#
#####################################################################################

import os

# os.environ['TDSDUMP'] = 'stdout'

import pymssql

# 建立数据库连接
# as_dict(bool) ：如果设置为True，则后面的查询结果返回的是字典，关键字为查询结果的列名；否则(默认)返回的为list。
# autocommit(bool)：默认为False，这样如果对数据表进行更改，则需要手动调用commit来提交操作。
#
# Install FreeTDS
# http://www.pymssql.org/en/stable/freetds.html
# 
# Python 使用 pymssql 连接 SQL Server 报错：DB-Lib error message 20002, severity 9
# https://blog.csdn.net/qq_35578171/article/details/135347470
conn = pymssql.connect('msdbt', 'wluser', 'wlpwd.123', 'wldbtest')

# 获取 Cursor 对象
# 这里也可以传入 as_dict 参数
cursor = conn.cursor()

# 创建测试表 persons，包含字段：ID、name、salesrep
cursor.execute("""
IF OBJECT_ID('persons', 'U') IS NOT NULL
    DROP TABLE persons
CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(100),
    salesrep VARCHAR(100),
    PRIMARY KEY(id)
)
""")

# 插入三条测试数据
cursor.executemany(
    "INSERT INTO persons VALUES (%d, %s, %s)",
    [(1, 'John Smith', 'John Doe'),
     (2, 'Jane Doe', 'Joe Dog'),
     (3, 'Mike T.', 'Sarah H.')])

# 如果连接时没有设置autocommit为True的话，必须主动调用commit() 来保存更改。
conn.commit()

# 查询记录
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')

# 获取一条记录
row = cursor.fetchone()

# 循环打印记录(这里只有一条，所以只打印出一条)
while row:
    print("ID=%d, Name=%s" % (row[0], row[1]))
    row = cursor.fetchone()

# 连接用完后记得关闭以释放资源
conn.close() 
